A virtual machine (VM) is a portion of software that, when executed on appropriate hardware, creates an environment allowing the virtualization of an actual physical computer system. Virtualization permits multiplexing of an underlying host computer between different virtual machines. The host computer typically allocates a certain amount of its resources to each of the virtual machines. Each virtual machine can then be able to use the allocated resources to execute applications, including operating systems (referred to as guest operating systems (OS)). The software layer providing the virtualization is commonly referred to as a hypervisor and is also known as a virtual machine monitor (VMM), a kernel-based hypervisor, or a host operating system. The hypervisor usually emulates the underlying hardware of the host computer, making the use of the virtual machine transparent to the guest operating system and the user of the computer. A VM may have a virtual processor, virtual system memory, virtual storage, and various virtual devices.
Virtual machines may be migrated between a source host computing platform (“the source host”) and a destination host computing platform (“the destination host”) connected over a network, which may be a local-area network or a wide area-network that may include the Internet. Migration permits a clean separation between hardware and software, thereby improving facilities fault management, load balancing, and low-level system maintenance.
One method of migrating virtual machines between a source host and a destination host over a network is to suspend the source VM, copy its state to the destination host, boot the copied VM on the destination host, and remove the source VM. This approach has been shown to be impractical because of the large amount of down time users may experience. A more desirable approach can be to permit a running source VM to continue to run during the migration process, a technique known as live migration. Live migration typically permits a running VM to be moved between different physical machines without disconnecting a running client or application program. For a successful live migration, memory, storage, and network connectivity of the VM should be migrated from the source host to the destination host. While the VM on the source host is running, its memory can be copied to another physical machine. Memory on the source VM can change during the memory copy process. If the memory of the source VM changes, the changed memory can be copied to the other physical machine. When a rate of change of the memory is below a threshold, the VM on the source can be suspended and the state of the suspended VM, including memory, storage, and network connectivity, can be copied to the other physical machine.
The time between suspending the VM on the source host and resuming the VM on the destination host is known as “down-time.” A down-time of a live migration employing previous techniques may be lengthy—especially for migration between geographically remote hosts—and is approximately proportional to the size of memory and applications running on the source VM.